﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using i_core.p_enum;
using i_core.usr;

namespace i_core.net {
	public interface i_connect : i_dependency {
		e_connect_type type { get; }

		bool is_connected { get; }

		IObservable<i_r_login_info> login_event { get; }

		IObservable<i_r_exit_info> exit_event { get; }

		IObservable<i_r_skt_ka_info> recording_event { get; }

		IObservable<i_r_answer_info> answer_event { get; }

		IObservable<i_r_terminate_info> terminate_event { get; }

		IObservable<i_r_skt_ka_info> skt_ka_event { get; }

		IObservable<i_r_call_info> skt_call_event { get; }

		i_login_info p_login_info(i_user_info user_info);

		i_dial_info p_dial_info(i_user_info user_info, string local_number, string remote_number);

		i_terminate_info p_terminate_info(i_user_info user_info, string cause);
		i_exit_info p_exit_info(i_user_info user_info, string cause);

		Task<bool> send_message_info(string message);

		Task<bool> send_message_info<T>(T message_info) where T : i_skt_info;
	}
}
